package com.zxy.ziems.server.scene.service;

import com.zxy.ziems.server.file.vo.FileVO;
import com.zxy.ziems.server.scene.pojo.dto.SceneDTO;
import com.zxy.ziems.server.scene.pojo.entity.SceneEntity;
import com.zxy.ziems.server.scene.pojo.param.SceneTreeParam;
import com.zxy.ziems.server.scene.pojo.vo.SceneTreeVO;
import com.zxy.ziems.server.scene.pojo.vo.SceneVO;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * @author chdzq
 * @create 2023/3/21
 */
public interface SceneService {

    /**
     * 增加
     *
     * @param dto
     */
    SceneVO add(SceneDTO dto);

    /**
     * 更新
     */
    SceneVO update(SceneDTO dto);

    /**
     * 删除
     *
     * @param id
     */
    void deleteById(String id);


    /**
     * 获取DO
     *
     * @param id
     * @return
     */
    SceneEntity getById(String id);

    /**
     * 获取DO列表
     *
     * @param ids
     * @return
     */
    List<SceneEntity> listByIds(Collection<? extends Serializable> ids);


    /**
     * 获取全部DO列表
     *
     * @return
     */
    List<SceneEntity> list();

    /**
     * 获取全部继承id的场景类别。为空是全部列表
     *
     * @return
     */
    List<SceneEntity> inheritListBy(String id);

    /**
     * 获取code的全部及子场景类别
     *
     * @return
     */
    List<SceneEntity> allListByCode(String code);

    /**
     * 获取展示信息
     *
     * @param id
     * @return
     */
    SceneVO viewById(String id);

    SceneVO viewByCode(String code);

    /**
     * 查询列表
     *
     * @param param 查询参数
     */
    List<SceneTreeVO> getTreeBy(SceneTreeParam param);


    /**
     * 查询列表
     *
     * @param parentId 父级节点 null 或是0 为 根节点
     */
    List<SceneVO> listByParentId(String parentId);

    /**
     * 获取code的子场景文件
     * @param code
     * @return
     */
    List<FileVO> childSceneFileByCode(String code);

    /**
     * 获取过滤id
     * @return
     */
    List<String> getFilterParentIds();
}
